#include <pthread.h> //线程库
#include <iostream>
#include <unistd.h>
using namespace std;

// 线程分离

void *routine(void *agrs)
{
    int cnt = 5;
    while (cnt--)
    {
        cout << "新线程运行" << endl;
        sleep(1);
    }
    return nullptr;
}

int main()
{
    pthread_t tid;
    pthread_create(&tid, nullptr, routine, (void *)"thread");
    cout << "运行主线程" << endl;

    // 分离
    pthread_detach(tid);
    // 等待失败！！！
    int ret = pthread_join(tid, nullptr);
    if (ret != 0)
        cout << "等待失败！" << endl;
}

// 线程等待

// void *routine(void *agrs)
// {
//     string name = static_cast<char *>(agrs);
//     cout << "新线程执行完方法，返回" << endl;
//     return (void *)1;
// }

// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid, nullptr, routine, (void *)"thread");

//     // 阻塞等待
//     void *ret;
//     pthread_join(tid, &ret);
//     cout << "等待成功：" << (long long)ret << endl; // long long防止在64位下进度丢失

//     int cnt = 5;
//     while (cnt--)
//     {
//         cout << "主线程运行中" << endl;
//         sleep(1);
//     }
//}

// 线程创建、终止、取消

// void *routine(void *args)
// {
//     string name = static_cast<char *>(args);
//     cout << "新线程：" << name << endl;
//     while (true)
//     {
//     }

//     // 不应该看见
//     cout << "线程取消失败！" << endl;
//     return nullptr;
// }

// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid, nullptr, routine, (void *)"thread -1");
//     // 取消线程
//     pthread_cancel(tid);

//     cout << "主线程" << endl;
// }